package com.newtouch.cq.base.starter.business.service;

import com.newtouch.cq.base.starter.business.entity.SysMenu;
import com.baomidou.mybatisplus.extension.service.IService;
import com.newtouch.cq.base.starter.business.model.dto.MenuTree;
import com.newtouch.cq.base.starter.business.model.dto.SysMenuAddDTO;
import com.newtouch.cq.base.starter.business.model.dto.SysMenuUpdDTO;
import com.newtouch.cq.base.starter.business.model.vo.MenuVO;
import com.newtouch.cq.base.starter.business.model.vo.UserPermissionInfoModel;
import com.newtouch.cq.lang.result.MccObjectResult;
import org.springframework.web.bind.annotation.PathVariable;

import java.util.List;

/**
 * <p>
 * 系统菜单表 服务类
 * </p>
 *
 * @author Alex
 * @since 2021-08-02
 */
public interface IBaseSysMenuService extends IService<SysMenu> {

    /**
     * 获取当前用户菜单权限
     * @return
     */
    MccObjectResult<UserPermissionInfoModel> getUserPermissionInfo();

    /**
     * 通过用户id查询用户菜单
     * @param userId
     * @return
     */
    List<MenuVO> selectUserMenu(long userId);

    /**
     * 获取菜单树
     * @return
     */
    List<MenuTree> getTree();

    /**
     * 获取菜单树
     * @return
     */
    List<MenuTree> allTreeCurrentUser();

    /**
     * 新增菜单
     * @param req
     * @return
     */
    void add(SysMenuAddDTO req);

    /**
     * 获取菜单详情
     * @param id
     * @return
     */
    MenuVO selectById(long id);

    /**
     * 菜单更新
     */
    void upadte(long id, SysMenuUpdDTO req);

    /**
     * 通过标识删除菜单
     * @param id
     */
    void delete(long id);

    /**
     * 获取角色拥有的权限
     * @param roleId
     * @return
     */
    List<SysMenu> getRolePermissions(long roleId);
}
